using System;
using System.Collections.Generic;
using System.Text;
using Shared;
using Shared.SimpleControl.Phone;
using Shared.SimpleControl;
using Shared.SimpleControl.R;
using Newtonsoft.Json.Linq;
using com.hdl.on;
namespace Shared.SimpleControl.Phone
{
public class SonosPlay : FrameLayout
{
void showSourcePage ()
{
prev.Alpha = 1;
prev.Enable = true;
next.Alpha = 1;
next.Enable = true;
mode.Alpha = 1;
mode.Enable = true;
btnPlay.Alpha = 1;
btnPlay.Enable = true;
btnMute.Alpha = 1;
btnMute.Enable = true;
SeekBarVol.IsCanMove = true;
SeekBarVol.Alpha = 1;
if (currentSonosMusic.sonosPlayStatus.playbackState == 4) {
prev.Alpha = 0.5f;
prev.Enable = false;
next.Alpha = 0.5f;
next.Enable = false;
mode.Alpha = 0.5f;
mode.Enable = false;
btnPlay.Alpha = 0.5f;
btnPlay.Enable = false;
btnMute.Alpha = 0.5f;
btnMute.Enable = false;
SeekBarVol.Alpha = 0.5f;
SeekBarVol.IsCanMove = false;
}
}
///
/// 下一曲
///
Button next;
///
/// 上一曲
///
Button prev;
///
/// 停止/播放
///
Button btnPlay;
///
///当前播放音乐时间
///
Button btnMusicplayTime;
///
/// 音乐总时间
///
Button btnTotalMusicTime;
///
/// 播放音乐时间进度条
///
// Button progressMaxButton;
///
/// 播放进度
///
//Button progressButton;
///
/// 歌名
///
TextView title;
///
/// 静音图标
///
Button btnMute;
Button btnMusicvol;
///
/// 当前音量进度条
///
HorizontalSeekBar horizontalSeekBarVol;
///
/// 快进进度条
///
HorizontalSeekBar SeekBarVol;
///
/// 播放模式:0列表循环,1单曲循环,2随机播放
///
Button mode;
///
/// 当前音乐播放器的名称
///
Button setName;
///
/// 歌手头像
///
Button musicartist;
///
/// 当前播放源图标
///
Button currentsource;
///
/// 当前歌手图像
///
ImageView portrait;
FrameLayout middleFrameLayout = new FrameLayout ();
SonosMusic currentSonosMusic;
///
/// 加载音乐播放界面
///
public void Show (SonosMusic sonosMusic)
{
this.currentSonosMusic = sonosMusic;
//读取当前的音乐状态
readStatus ();
AddChidren (new Button {
Height = Application.GetRealHeight (30),
BackgroundColor = SkinStyle.Current.MusicTopFrameLayout,
});
var topFrameLayout = new FrameLayout {
Height = Application.GetRealHeight (100),
Y = Application.GetRealHeight (30),
BackgroundColor = SkinStyle.Current.MusicTopFrameLayout,
};
AddChidren (topFrameLayout);
setName = new Button {
TextColor = SkinStyle.Current.MusicTextColor,
};
topFrameLayout.AddChidren (setName);
var back = new Button {
Width = Application.GetMinRealAverage (72),
Height = Application.GetMinRealAverage (89),
X = Application.GetRealWidth (-1),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/PlayBack.png",
};
topFrameLayout.AddChidren (back);
back.MouseDownEventHandler += (sender, e) => {
RemoveFromParent ();
};
var set = new Button {
Width = Application.GetRealWidth (76),
Height = Application.GetRealHeight (66),
X = Application.GetRealWidth (550),
UnSelectedImagePath = "MusicIcon/PlayMusicset.png",
Gravity = Gravity.CenterVertical,
Tag = currentSonosMusic,
};
topFrameLayout.AddChidren (set);
set.MouseDownEventHandler += (sender, e) => {
var sonosMusicSource = new SonosMusicSource ();
MainPage.MainFrameLayout.AddChidren (sonosMusicSource);
sonosMusicSource.Show (currentSonosMusic);
};
middleFrameLayout.Width = LayoutParams.MatchParent;
middleFrameLayout.Height = Application.GetRealHeight (1006 + 100);
middleFrameLayout.Y = topFrameLayout.Bottom;
middleFrameLayout.BackgroundImagePath = "MusicIcon/PlayBackgroun.png";
AddChidren (middleFrameLayout);
//隐藏底层
topFrameLayout.BringToFront ();
FrameLayout fra = new FrameLayout {
Y = Application.GetRealHeight (155 - 130),
Height = Application.GetRealHeight (106),
};
middleFrameLayout.AddChidren (fra);
currentsource = new Button {
Width = Application.GetRealWidth (61),
Height = Application.GetRealHeight (81),
X = Application.GetRealWidth (640 - 61 - 1 - 20),
Gravity = Gravity.CenterVertical,
};
fra.AddChidren (currentsource);
var color = new FrameLayout {
Width = Application.GetMinRealAverage (330),
Height = Application.GetMinRealAverage (330),
Y = Application.GetRealHeight (290 - 130),
BackgroundColor = 0x30FFFFFF,
//BackgroundImagePath = "MusicIcon/PlayPortrait.png",
//Animate= Animate.Rotation,
Radius = (uint)Application.GetMinRealAverage (165),
Gravity = Gravity.CenterHorizontal,
};
middleFrameLayout.AddChidren (color);
portrait = new ImageView {
Width = Application.GetMinRealAverage (280),
Height = Application.GetMinRealAverage (280),
Radius = (uint)Application.GetMinRealAverage (140),
Gravity = Gravity.Center,
ImagePath = "MusicIcon/PlayPortrait.png",
};
color.AddChidren (portrait);
var frameLayout2 = new FrameLayout {
Height = Application.GetRealHeight (103),
Y = Application.GetRealHeight (730 - 130),
};
middleFrameLayout.AddChidren (frameLayout2);
mode = new Button {
Width = Application.GetRealWidth (94),
Height = Application.GetRealHeight (82),
X = Application.GetRealWidth (1),
Gravity = Gravity.CenterVertical,
};
frameLayout2.AddChidren (mode);
mode.MouseDownEventHandler += Mode_MouseDownEventHandler;
title = new TextView {
Width = Application.GetMinRealAverage (300),
Height = Application.GetMinRealAverage (60),
X = Application.GetRealWidth (170),
Gravity = Gravity.CenterVertical,
//Gravity = Gravity.Center,
TextSize = 15,
TextColor = SkinStyle.Current.MusicTextColor
};
frameLayout2.AddChidren (title);
musicartist = new Button {
Width = Application.GetMinRealAverage (300),
Height = Application.GetMinRealAverage (60),
X = Application.GetRealWidth (170),
Y = Application.GetRealHeight (790 - 130),
//TextColor = 0x80ffffff,
TextColor = SkinStyle.Current.MusicArtistTextColor
};
middleFrameLayout.AddChidren (musicartist);
#region 歌曲时间 快,慢进度条
var tempFrameLayout3 = new FrameLayout {
Height = Application.GetRealHeight (130),
Y = Application.GetRealHeight (840 - 130),
};
middleFrameLayout.AddChidren (tempFrameLayout3);
btnMusicplayTime = new Button {
Width = Application.GetRealWidth (126),
Height = Application.GetRealHeight (126),
X = Application.GetRealWidth (1),
Gravity = Gravity.CenterVertical,
};
tempFrameLayout3.AddChidren (btnMusicplayTime);
btnTotalMusicTime = new Button {
Width = Application.GetRealWidth (126),
Height = Application.GetRealHeight (126),
X = Application.GetRealWidth (640 - 1 - 126),
Gravity = Gravity.CenterVertical,
};
tempFrameLayout3.AddChidren (btnTotalMusicTime);
var layout = new FrameLayout {
X = Application.GetRealWidth (120),
Width = Application.GetRealWidth (400),
Height = Application.GetRealHeight (50),
Gravity = Gravity.CenterVertical,
Radius = (uint)Application.GetRealHeight (25),
};
tempFrameLayout3.AddChidren (layout);
//快进进度条
SeekBarVol = new HorizontalSeekBar {
Width = Application.GetRealWidth (400 - 26),
Height = Application.GetRealHeight (50),
Radius = (uint)Application.GetRealHeight (25),
X = Application.GetRealWidth (13),
Gravity = Gravity.CenterVertical,
ProgressColor = 0xffFE5E00,
SleepTime = 1000,
ThumbRadius = 3,
};
layout.AddChidren (SeekBarVol);
SeekBarVol.MouseUpEventHandler += (sender, e) => {
int totalSecond = (int)(SeekBarVol.Progress * 1.0f / SeekBarVol.Max * currentSonosMusic.sonosPlayStatus.durationMillis);
currentSonosMusic.eventsend (currentSonosMusic, 10, totalSecond);
currentSonosMusic.sonosPlayStatus.positionMillis = totalSecond;
};
#endregion
#region 上,下,暂停/播放
var tempFrameLayout = new FrameLayout {
Height = Application.GetRealHeight (130),
Y = Application.GetRealHeight (960 - 130),
};
middleFrameLayout.AddChidren (tempFrameLayout);
prev = new Button {
Width = Application.GetMinRealAverage (126),
Height = Application.GetMinRealAverage (126),
X = Application.GetRealWidth (115),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/PlayPrve.png",
SelectedImagePath = "MusicIcon/PlayPrveSelected.png",
};
tempFrameLayout.AddChidren (prev);
prev.MouseDownEventHandler += (sender, e) => {
prev.IsSelected = true;
currentSonosMusic.eventsend (currentSonosMusic, 2, 0);
};
prev.MouseUpEventHandler += (sender, e) => {
prev.IsSelected = false;
};
btnPlay = new Button {
Width = Application.GetMinRealAverage (159),
Height = Application.GetMinRealAverage (127),
X = Application.GetRealWidth (241),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/Playplay.png",
SelectedImagePath = "MusicIcon/playmusicplaySelected.png",
};
tempFrameLayout.AddChidren (btnPlay);
btnPlay.MouseDownEventHandler += (sender, e) => {
if (btnPlay.IsSelected) {
btnPlay.IsSelected = false;
currentSonosMusic.eventsend (currentSonosMusic, 0, 2);
currentSonosMusic.sonosPlayStatus.playbackState = 2;
} else {
btnPlay.IsSelected = true;
currentSonosMusic.eventsend (currentSonosMusic, 0, 1);
currentSonosMusic.sonosPlayStatus.playbackState = 1;
}
};
next = new Button {
Width = Application.GetMinRealAverage (126),
Height = Application.GetMinRealAverage (126),
X = Application.GetRealWidth (400),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/PlayNext.png",
SelectedImagePath = "MusicIcon/PlayNextSelected.png",
};
tempFrameLayout.AddChidren (next);
next.MouseDownEventHandler += (sender, e) => {
next.IsSelected = true;
currentSonosMusic.eventsend (currentSonosMusic, 2, 1);
};
next.MouseUpEventHandler += (sender, e) => {
next.IsSelected = false;
};
#endregion
#region 静音, 音量+,-,
btnMute = new Button {
Width = Application.GetRealWidth (107),
Height = Application.GetRealHeight (127),
X = Application.GetRealWidth (1),//-2
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/PlayMute.png",
SelectedImagePath = "MusicIcon/PlayMuteSelected.png",
};
tempFrameLayout.AddChidren (btnMute);
btnMute.MouseDownEventHandler += (sender, e) => {
btnMute.IsSelected = !btnMute.IsSelected;
if (btnMute.IsSelected) {
currentSonosMusic.sonosPlayStatus.mute = true;
currentSonosMusic.eventsend (currentSonosMusic, 29, 100);
} else {
currentSonosMusic.sonosPlayStatus.mute = false;
currentSonosMusic.eventsend (currentSonosMusic, 29, 111);
}
};
btnMusicvol = new Button {
Width = Application.GetRealWidth (107),
Height = Application.GetRealHeight (127),
X = Application.GetRealWidth (640 - 1 - 107),//534
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/PlayVoice.png",
SelectedImagePath = "MusicIcon/PlayVoiceSelected.png",
};
tempFrameLayout.AddChidren (btnMusicvol);
btnMusicvol.MouseDownEventHandler += (sender, e) => {
Button button = sender as Button;
if (button.IsSelected) {
button.IsSelected = false;
middleFrameLayout.Y += Application.GetRealHeight (100);
} else {
button.IsSelected = true;
middleFrameLayout.Y -= Application.GetRealHeight (100);
}
};
var ProgFrameLayout = new FrameLayout {
Width = LayoutParams.MatchParent,
Height = Application.GetRealHeight (100),
Y = Application.GetRealHeight (1120 - 130),
};
middleFrameLayout.AddChidren (ProgFrameLayout);
var redbtnMusicvol = new Button {
Width = Application.GetRealWidth (107),
Height = Application.GetRealHeight (127),
X = Application.GetRealWidth (1),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/redvol.png",
SelectedImagePath = "MusicIcon/Selectedredvol.png",
};
ProgFrameLayout.AddChidren (redbtnMusicvol);
var addbtnMusicvo = new Button {
Width = Application.GetRealWidth (107),
Height = Application.GetRealHeight (127),
X = Application.GetRealWidth (640 - 108),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "MusicIcon/addvol.png",
SelectedImagePath = "MusicIcon/Selectedaddvol.png",
};
ProgFrameLayout.AddChidren (addbtnMusicvo);
var frameLayout = new FrameLayout {
Width = Application.GetRealWidth (460),
Height = Application.GetRealHeight (50),
Gravity = Gravity.CenterVertical,
X = Application.GetRealWidth (90),//120
};
ProgFrameLayout.AddChidren (frameLayout);
//当前播放的音量
horizontalSeekBarVol = new HorizontalSeekBar {
Width = Application.GetRealWidth (460 - 26),//490
Height = Application.GetRealHeight (50),
Radius = (uint)Application.GetRealHeight (25),
X = Application.GetRealWidth (13),
Gravity = Gravity.CenterVertical,
ProgressColor = 0xffFE5E00,
Max = 100,
SleepTime = 1000,
ThumbRadius = 9,
//IsCanClick=false
};
frameLayout.AddChidren (horizontalSeekBarVol);
horizontalSeekBarVol.ProgressChanged += (sender, e) => {
currentSonosMusic.eventsend (currentSonosMusic, 28, horizontalSeekBarVol.Progress);
currentSonosMusic.sonosPlayStatus.vol = horizontalSeekBarVol.Progress.ToString ();
};
#endregion
Volume.VolumeChange = (volume) => {
//if (Application.DeviceType == Device.Ios && A31MusicModel.Current.A31PlayStatus.Source == "BLUETOOTH") {
// return;
//}
horizontalSeekBarVol.Progress = volume;
currentSonosMusic.sonosPlayStatus.vol = horizontalSeekBarVol.Progress.ToString ();
currentSonosMusic.eventsend (currentSonosMusic, 28, horizontalSeekBarVol.Progress);
};
//加音量
addbtnMusicvo.MouseUpEventHandler += (sen, e) => {
addbtnMusicvo.IsSelected = false;
var voladd = horizontalSeekBarVol.Progress + 1;
if (voladd > 100) {
voladd = 100;
}
currentSonosMusic.eventsend (currentSonosMusic, 28, voladd);
currentSonosMusic.sonosPlayStatus.vol = voladd.ToString ();
horizontalSeekBarVol.Progress = voladd;
};
addbtnMusicvo.MouseDownEventHandler += (sen, e) => {
addbtnMusicvo.IsSelected = true;
};
//减音量
redbtnMusicvol.MouseUpEventHandler += (sen, e) => {
redbtnMusicvol.IsSelected = false;
var volred = horizontalSeekBarVol.Progress - 1;
if (volred < 0) {
volred = 0;
}
currentSonosMusic.eventsend (currentSonosMusic, 28, volred);
currentSonosMusic.sonosPlayStatus.vol = volred.ToString ();
horizontalSeekBarVol.Progress = volred;
};
redbtnMusicvol.MouseDownEventHandler += (sen, e) => {
redbtnMusicvol.IsSelected = true;
};
}
///
/// 模式切换
///
///
///
private void Mode_MouseDownEventHandler (object sender, MouseEventArgs e)
{
Button button = (Button)sender;
switch (currentSonosMusic.sonosPlayStatus.playModes) {
//(2:单曲循环,3:顺序播放、4:全部、5:随机播放)
case 5:
currentSonosMusic.sonosPlayStatus.playModes = 2;
button.UnSelectedImagePath = "MusicIcon/playModeDDdanquplay.png";
button.IsSelected = false;
break;
case 2:
currentSonosMusic.sonosPlayStatus.playModes = 3;
button.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png";
button.IsSelected = false;
break;
case 3:
currentSonosMusic.sonosPlayStatus.playModes = 4;
button.UnSelectedImagePath ="MusicIcon/playModeshunxuplay.png";
button.IsSelected = false;
break;
case 4:
currentSonosMusic.sonosPlayStatus.playModes = 5;
button.UnSelectedImagePath = "MusicIcon/playModesuijiplay.png";
button.IsSelected = false;
break;
default:
currentSonosMusic.sonosPlayStatus.playModes = 3;
button.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png";
button.IsSelected = false;
break;
}
currentSonosMusic.eventsend (currentSonosMusic, 5, currentSonosMusic.sonosPlayStatus.playModes);
}
///
/// 读取音乐状态
///
void readStatus ()
{
System.Threading.Tasks.Task.Run (() => {
System.DateTime dateTime = System.DateTime.Now.AddSeconds (-5);
while (Parent != null) {
//等待1秒,更新界面
System.Threading.Thread.Sleep (1000 * 1);
Application.RunOnMainThread (() => {
#region
try {
string patn = "SonosMusicImage_";
if (Shared.IO.FileUtils.Exists (patn+ currentSonosMusic.sonosPlayStatus.songName)) {
portrait.ImagePath = patn+ currentSonosMusic.sonosPlayStatus.songName;
} else {
portrait.ImagePath = "MusicIcon/PlayPortrait.png";
System.Threading.Tasks.Task.Run (() => {
var filePath = SonosMusic.SonosMusicImage (currentSonosMusic.sonosPlayStatus.imageUrl, currentSonosMusic.sonosPlayStatus.songName);
if (filePath != null) {
Application.RunOnMainThread (() => {
portrait.ImagePath = filePath;
});
}
});
}
//总共有多少秒
int totalSecond = currentSonosMusic.sonosPlayStatus.durationMillis / 1000;
//分钟
int totalMusicMinute = totalSecond / 60;
//秒钟
int totalMusicSecond = totalSecond % 60;
string totalTime = (totalMusicMinute.ToString ().Length < 2 ? "0" + totalMusicMinute.ToString () : totalMusicMinute.ToString ()) + ":" + (totalMusicSecond.ToString ().Length < 2 ? "0" + totalMusicSecond.ToString () : totalMusicSecond.ToString ());
btnTotalMusicTime.Text = totalTime;
title.Text = currentSonosMusic.sonosPlayStatus.songName;
musicartist.Text = currentSonosMusic.sonosPlayStatus.artist;
horizontalSeekBarVol.Progress = int.Parse (currentSonosMusic.sonosPlayStatus.vol);
//更新播放器音量给系统音量
Volume.MusicVolume = horizontalSeekBarVol.Progress;
switch (currentSonosMusic.sonosPlayStatus.playModes) {
#region
case 2:
mode.UnSelectedImagePath = "MusicIcon/playModeDDdanquplay.png";
break;
case 3:
mode.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png";
break;
case 4:
mode.UnSelectedImagePath ="MusicIcon/playModeshunxuplay.png";
break;
case 5:
mode.UnSelectedImagePath = "MusicIcon/playModesuijiplay.png";
break;
default:
mode.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png";
break;
#endregion
}
setName.Text = currentSonosMusic.name;
if (currentSonosMusic.sonosPlayStatus.mute) {
btnMute.IsSelected = true;
} else {
btnMute.IsSelected = false;
}
//btnMute.IsSelected = currentSonosMusic.sonosPlayStatus.vol == "0" ? true : false;
if (currentSonosMusic.sonosPlayStatus.playbackState == 1) {
btnPlay.IsSelected = true;
//如果在播放,时间就不断变化
//当前播放音乐时间
int playSecond = currentSonosMusic.sonosPlayStatus.positionMillis / 1000 + (int)(DateTime.Now - currentSonosMusic.sonosPlayStatus.DateTime).TotalSeconds;
//分钟
int playMusicMinute = playSecond / 60;
//秒钟
int playMusicSecond = playSecond % 60;
string playTime = (playMusicMinute.ToString ().Length < 2 ? "0" + playMusicMinute.ToString () : playMusicMinute.ToString ()) + ":" + (playMusicSecond.ToString ().Length < 2 ? "0" + playMusicSecond.ToString () : playMusicSecond.ToString ());
//如果在播放,时间就不断变化
btnMusicplayTime.Text = playTime;
if (totalSecond == 0) {
SeekBarVol.Progress = 0;
} else {
SeekBarVol.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
}
} else {
//停止状态
btnPlay.IsSelected = false;
btnMusicplayTime.Text = "00:00";
btnTotalMusicTime.Text = "00:00";
}
showSourcePage ();
} catch {
}
#endregion
});
}
});
}
}
}